package cn.ilovese.collect.service.user;

import cn.ilovese.collect.vo.Device.DeviceVO;
import cn.ilovese.collect.vo.InviteGroupVO;
import cn.ilovese.collect.vo.NullVO;
import cn.ilovese.collect.vo.ResultVO;
import cn.ilovese.collect.vo.report.ReportVO;
import cn.ilovese.collect.vo.statistic.DataVisualizationVO;
import cn.ilovese.collect.vo.task.TaskVO;
import cn.ilovese.collect.vo.task.TaskWithUsernameVO;
import cn.ilovese.collect.vo.user.MessageFormVO;
import cn.ilovese.collect.vo.user.UserVO;
import cn.ilovese.collect.vo.user.WorkerInfoVO;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

public interface UserService {
    public ResultVO<UserVO> userRegister(UserVO vo);

    ResultVO<UserVO> userLogin(String username, String password);

    ResultVO<UserVO> userLoginWithEmail(String username, String password);

    UserVO getUser(Integer uid);

    ResultVO<UserVO> updateUserInfo(UserVO userVO);

    ResultVO<List<UserVO>> getAllWorkers();

    Map<String, Object> getContributeCount(Integer workerid);

    ResultVO<Integer> inviteWorkers(InviteGroupVO inviteGroupVO);

    ResultVO<List<TaskWithUsernameVO>> getInvitedTaskByWorkerId(Integer workerid);

    ResultVO<WorkerInfoVO> getWorkerInfo(Integer userId);

    ResultVO<List<DeviceVO>> getUserDevices(Integer userId);

    ResultVO<DeviceVO> createOrUpdateDevice(Integer userId, DeviceVO device);

    ResultVO<NullVO> dropDevice(Integer deviceId);

    ResultVO<List<DataVisualizationVO>> getStatisticGraph(String graphName);

    ResultVO<NullVO> sendMessageToUser(MessageFormVO messageFormVO);

    ResultVO<NullVO> sendRemindMessageToUser(MessageFormVO messageFormVO);
}
